﻿//Install Visual T4 for syntax highlighting!
//http://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591


using System;

namespace Sponsorship.Domain.SponsorshipTypes
{
    public sealed class EnterSponsorshipType : ICommand
    {
        public EnterSponsorshipType()
        {
        }

        public EnterSponsorshipType (Guid sponsorshipTypeId, string name, decimal amount, Period period, string comment)
        {
            SponsorshipTypeId = sponsorshipTypeId;
            Name = name;
            Amount = amount;
            Period = period;
            Comment = comment;
        }

        public decimal Amount { get; private set; }
        public string Comment { get; private set; }
        public string Name { get; private set; }
        public Period Period { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
    }

    public sealed class SponsorshipTypeEntered : Event
    {
        public SponsorshipTypeEntered()
        {
        }

        public SponsorshipTypeEntered (Guid sponsorshipTypeId, string name, decimal amount, Period period, string comment)
        {
            SponsorshipTypeId = sponsorshipTypeId;
            Name = name;
            Amount = amount;
            Period = period;
            Comment = comment;
        }

        public decimal Amount { get; private set; }
        public string Comment { get; private set; }
        public string Name { get; private set; }
        public Period Period { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
    }

    public sealed class ChangeSponsorshipType : ICommand
    {
        public ChangeSponsorshipType()
        {
        }

        public ChangeSponsorshipType (Guid sponsorshipTypeId, int version, string name, decimal amount, Period period, string comment)
        {
            SponsorshipTypeId = sponsorshipTypeId;
            Version = version;
            Name = name;
            Amount = amount;
            Period = period;
            Comment = comment;
        }

        public decimal Amount { get; private set; }
        public string Comment { get; private set; }
        public string Name { get; private set; }
        public Period Period { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
        public int Version { get; private set; }
    }

    public sealed class SponsorshipTypeChanged : Event
    {
        public SponsorshipTypeChanged()
        {
        }

        public SponsorshipTypeChanged (Guid sponsorshipTypeId, string name, decimal amount, Period period, string comment)
        {
            SponsorshipTypeId = sponsorshipTypeId;
            Name = name;
            Amount = amount;
            Period = period;
            Comment = comment;
        }

        public decimal Amount { get; private set; }
        public string Comment { get; private set; }
        public string Name { get; private set; }
        public Period Period { get; private set; }
        public Guid SponsorshipTypeId { get; private set; }
    }

    public sealed class DeleteSponsorshipType : ICommand
    {
        public DeleteSponsorshipType()
        {
        }

        public DeleteSponsorshipType (Guid sponsorshipTypeId, int version)
        {
            SponsorshipTypeId = sponsorshipTypeId;
            Version = version;
        }

        public Guid SponsorshipTypeId { get; private set; }
        public int Version { get; private set; }
    }

    public sealed class SponsorshipTypeDeleted : Event
    {
        public SponsorshipTypeDeleted()
        {
        }

        public SponsorshipTypeDeleted (Guid sponsorshipTypeId)
        {
            SponsorshipTypeId = sponsorshipTypeId;
        }

        public Guid SponsorshipTypeId { get; private set; }
    }
}